package com.grandtech.insurance.service.app;

import com.grandtech.insurance.domain.BoundModel;
import com.mapbox.geojson.Feature;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface IFeatureService {
    /**
     * 获取图层结构信息
     *
     * @param tableName
     * @return
     */
    public Map getLayerScheme(String tableName);

    /**
     * 根据图层主键获取feature
     *
     * @param tableName
     * @return
     */
    public Map get(String tableName, Feature feature);

    /**
     * 根据图层主键获取feature
     *
     * @param tableName
     * @return
     */
    public Feature getFeature(String tableName, Feature feature);

    public Feature getFeature1(String tableName, Map map);

    /**
     * 根据图层主键获取feature
     *
     * @param tableName
     * @return
     */
    public Feature get(String tableName, Object pk);

    /**
     * @param tableName 表名
     * @param feature   feature
     * @param fields    查询字段
     * @return
     */
    public Feature getFeature(String tableName, Feature feature, String... fields);

    /**
     * 根据图层名称自定义查询
     *
     * @param tableName
     * @param condition
     * @return
     */
    public Feature getFeatureByMapCondition(String tableName, Map condition);

    /**
     * 根据图层名称自定义查询
     *
     * @param tableName
     * @param condition
     * @return
     */
    public Feature getFeatureByCondition(String tableName, String condition);

    /**
     * 根据图层名称自定义查询
     *
     * @param tableName
     * @param condition
     * @return
     */
    public List<Feature> getList(String tableName, String condition);

    /**
     * 根据图层名称自定义查询
     *
     * @param tableName
     * @param condition
     * @return
     */
    public List<Feature> getList(String tableName, String condition, String shapeFun);

    /**
     * 保存feature到指定图层
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean insert(String tableName, Feature feature);

    /**
     * @param tableName
     * @param feature
     * @return
     */
    public Feature insertF(String tableName, Feature feature);

    /**
     * 保存或者更新feature到指定图层  （判断是否存在的依据是图层主键）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean insertOrUpdate(String tableName, Feature feature);

    /**
     * 保存或者更新feature到指定图层  （判断是否存在的依据是fields的属性值）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean insertOrUpdate(String tableName, Feature feature, String... fields);

    /**
     * 保存或者更新feature到指定图层  （判断是否存在的依据是condition）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean insertOrUpdate(String tableName, Feature feature, Map condition);

    /**
     * 保存或者更新feature到指定图层  （判断是否存在的依据是condition）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean insertOrUpdate(String tableName, Feature feature, String condition);

    /**
     * 判断feature是否存在  （判断是否存在的依据是图层主键）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean isExistFeature(String tableName, Feature feature);

    /**
     * 判断feature是否存在  （判断是否存在的依据是fields对应属性值）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean isExistFeature(String tableName, Feature feature, String... fields);

    /**
     * 判断feature是否存在  （判断是否存在的依据是condition）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean isExistFeature(String tableName, Feature feature, Map condition);

    /**
     * 判断feature是否存在  （判断是否存在的依据是condition）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean isExistFeature(String tableName, Feature feature, String condition);

    /**
     * 更新feature  （更新条件是图层主键）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean update(String tableName, Feature feature);

    /**
     * 更新feature  （更新条件是feature属性值）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean update(String tableName, Feature feature, String... fields);

    /**
     * 更新feature  （更新条件是condition）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean update(String tableName, Feature feature, Map condition);

    /**
     * 删除feature  （删除条件是图层主键）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Boolean delete(String tableName, Feature feature);

    /**
     * 删除feature  （删除条件是fields字段对应的属性值）
     *
     * @param tableName
     * @param feature
     * @param fields
     * @return
     */
    public Boolean delete(String tableName, Feature feature, String... fields);

    /**
     * 删除feature  （删除条件是condition）
     *
     * @param tableName
     * @param condition
     * @return
     */
    public Boolean delete(String tableName, Map condition);

    /**
     * 执行sql
     *
     * @param sql
     */
    public void exeSql(String sql);
    //========================================================

    /**
     * 根据图层信息主键获取feature
     *
     * @param layerScheme
     * @return
     */
    public Map get(Map layerScheme, Feature feature);

    /**
     * 根据图层主键获取feature
     *
     * @param layerScheme
     * @return
     */
    public Feature get(Map layerScheme, Object pk);

    /**
     * where key = value and key = value
     *
     * @param layerScheme
     * @param condition
     * @return
     */
    /**
     * 根据图层名称自定义查询
     *
     * @param layerScheme
     * @param condition
     * @return
     */
    public Feature getFeatureByMapCondition(Map layerScheme, Map condition);

    /**
     * 根据图层名称自定义查询
     *
     * @param layerScheme
     * @param condition
     * @return
     */
    public Feature getFeatureByCondition(Map layerScheme, String condition);

    /**
     * 根据图层名称自定义查询
     *
     * @param layerScheme
     * @param condition
     * @return
     */
    public List<Feature> getList(Map layerScheme, String condition);

    /**
     *
     * @param tableName
     * @param features
     * @param fields
     * @return
     */
    public List<Feature> getList(String tableName, List<Feature> features, String... fields);

    /**
     * 批量插入
     *
     * @param featureMap
     * @return
     */
    public Map<Map, Feature> batchInsertF(Map<Map, Feature> featureMap);

    /**
     * 保存feature到指定图层
     *
     * @param layerScheme
     * @param feature
     * @return
     */
    public Feature insertF(Map layerScheme, Feature feature);

    /**
     * 更新feature  （更新条件是condition）
     *
     * @param layerScheme
     * @param feature
     * @return
     */
    public Boolean update(Map layerScheme, Feature feature);

    /**
     * 更新feature  （更新条件是condition）
     *
     * @param layerScheme
     * @param feature
     * @return
     */
    public Boolean update(Map layerScheme, Feature feature, Map condition);

    /**
     * 删除feature  （删除条件是图层主键）
     *
     * @param layerScheme
     * @param feature
     * @return
     */
    public Boolean delete(Map layerScheme, Feature feature);

    /**
     * 删除feature  （删除条件是condition）
     *
     * @param layerScheme
     * @param condition
     * @return
     */
    public Boolean delete(Map layerScheme, Feature feature, Map condition);

    /**
     * 保存或者更新feature到指定图层  （判断是否存在的依据是图层主键）
     *
     * @param tableName
     * @param feature
     * @return
     */
    public Feature insertOrUpdateF(String tableName, Feature feature);
    public Feature insertOrUpdateF1(String tableName, Feature feature);

    Map getGraffitiByObjectid(Integer objectid);
    Map getGraffitiByObjectid1(Integer objectid);
    Map pt1(Integer objectid);

    Map pt2(Integer objectid);

    List<BoundModel> getBounds(Integer objectid);
}















